#include "IIC.h"

// 旧库，停止维护，不再使用，请使用i2c.h

/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{

    IIC_SCLK_Set();
    IIC_SDIN_Set();
    IIC_SDIN_Clr();
    IIC_SCLK_Clr();
}

/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
    IIC_SCLK_Set();
    //	IIC_SCLK_Clr();
    IIC_SDIN_Clr();
    IIC_SDIN_Set();
}

void IIC_Wait_Ack()
{

    // GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为上拉输入模式
    // GPIOB->CRH |= 0x00080000;
    //	IIC_SDA = 1;
    //	delay_us(1);
    // IIC_SCL = 1;
    // delay_us(50000);
    /*	while(1)
        {
            if(!IIC_SDA)				//判断是否接收到IIC 应答信号
            {
                //GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为通用推免输出模式
                //GPIOB->CRH |= 0x00030000;
                return;
            }
        }
    */
    IIC_SCLK_Set();
    IIC_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char da)
{
    unsigned char i;
    unsigned char m;
    IIC_SCLK_Clr();
    for (i = 0; i < 8; i++)
    {
        m = da;
        //	IIC_SCLK_Clr();
        m = m & 0x80;
        if (m == 0x80)
        {
            IIC_SDIN_Set();
        }
        else
            IIC_SDIN_Clr();
        da = da << 1;
        IIC_SCLK_Set();
        IIC_SCLK_Clr();
    }
}
/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
    IIC_Start();
    Write_IIC_Byte(0x78); // Slave address,SA0=0
    IIC_Wait_Ack();
    Write_IIC_Byte(0x00); // write command
    IIC_Wait_Ack();
    Write_IIC_Byte(IIC_Command);
    IIC_Wait_Ack();
    IIC_Stop();
}
/**********************************************
// IIC Read byte
**********************************************/
unsigned char Read_IIC_Byte()
{
    unsigned char a = 0, dat = 0;
    IIC_SDIN_Clr(); // 释放 SDA
    for (a = 0; a < 8; a++) // 接收一个字节
    {
        IIC_SCLK_Set();
        dat <<= 1;
        dat |= IIC_SDA;
        IIC_SCLK_Clr();
    }
    return dat;
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
    IIC_Start();
    Write_IIC_Byte(0x78); // D/C#=0; R/W#=0
    IIC_Wait_Ack();
    Write_IIC_Byte(0x40); // write data
    IIC_Wait_Ack();
    Write_IIC_Byte(IIC_Data);
    IIC_Wait_Ack();
    IIC_Stop();
}
void IIC_WR_Byte(unsigned dat, unsigned cmd)
{
    if (cmd)
    {

        Write_IIC_Data(dat);
    }
    else
    {
        Write_IIC_Command(dat);
    }
}
